记几道比较常见的关于字符串的问题

第一:旋转字符串问题,如“abcXYZuvw”变为“XYZuvwabc”,即左旋转,此类问题是简单的字符串截取与拼接(subString)

1     public String LeftRotateString(String str,int n) {
2         if(str == null || n > str.length())return str;
3         return str.substring(n)+str.substring(0,n);
4     }

 

第二:字符串截取与翻转问题,如翻转英文句子“IU is my girlfriend”变为“girlfriend my is IU”,需要先将整个句子进行翻转,再对句子进行截取出单词,最后进行单词的翻转输出结果。

 1     public String ReverseSentence(String str) {
 2         if(str == null || str.length() == 0)return str;
 3         char[] arr = str.toCharArray();
 4         reverse(arr, 0, arr.length - 1);
 5         int first = 0;
 6         int last = 0;
 7         while(first < arr.length){
 8             if(arr[first] == ' '){
 9                 first++;
10                 last++;
11             }else if(last == arr.length || arr[last] == ' '){
12                 reverse(arr,first,last - 1);
13                 first = ++last; 
14             }else{
15                 last++;
16             }
17         }
18          return String.valueOf(arr);
19     }
20     
21     
22     private void reverse(char[] arr, int begin, int end){
23         while(begin < end){
24             char temp = arr[begin];
25             arr[begin] = arr[end];
26             arr[end] = temp;
27             begin++;
28             end--;
29         }
30     }

 

第三:扑克牌问题,在一副牌中选出五张,判断是否为顺子,其中大小王视为0并且可以替代任何数字。无论抽出的牌是否有大小王,需要满足的条件是牌不重复,并且抽出的牌最大最小数字插值小于5

 1 import java.util.TreeSet;
 2 public class Solution {
 3     public boolean isContinuous(int [] numbers) {
 4        if(numbers.length < 5 || numbers.length > 5)
 5         {
 6             return false;
 7         }
 8         //记录大小王的数量
 9         int king = 0;
10         TreeSet<Integer> ts = new TreeSet<>();
11         for(int i = 0;i < numbers.length;i++){
12             if(numbers[i] == 0){
13                 king++;
14             }
15             else{
16                 ts.add(numbers[i]);
17             }
18         }
19         if((king + ts.size()) != 5)return false;
20         if((ts.last() - ts.first()) < 5){
21             return true;
22         }
23         return false;
24     }
25 }

 

posted @ 2020-11-15 11:09  iu2java  阅读(94)  评论(0)    收藏  举报