1. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串”abcdefg”和数字2,该函数将返回左旋转两位得到的结果”cdefgab”。
示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghlrlose"限制:1 <= k < s.length <= 10000
思路:
- 截取,并拼接
class Solution {public String reverseLeftWords(String s, int n) {String left = s.substring(0,n);String right = s.substring(n,s.length());return right+left;}}
2. 扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 ``` 示例 1:
输入: [1,2,3,4,5] 输出: True
示例 2:
输入: [0,0,1,2,5] 输出: True
限制:
数组长度为 5
数组的数取值为 [0, 13]
<a name="WITH9"></a>### 只适合递增数组的方法:```javaclass Solution {public boolean isStraight(int[] nums) {int left = 0;int right = 1;int count = 0;// 让right 指向第一个数组元素不为0的位置while(nums[left]==0){count++;left++;right++;}int num = nums[left]+1;while(right<nums.length){if(num == nums[right]){left++;right++;num = nums[left] + 1;}else{if(count<=0){return false;}count--;num +=1;}}return true;}}
正确解法:
- 去除了0,并进行了进行升序排序(让后续操作更加简单)
- 需要考虑的问题:
- 非0的相同数,视为不连续
- 两数之间差距之和大于了0的个数,视为不连续
class Solution { public boolean isStraight(int[] nums) { int count = 0; int temp = 0; List<Integer> arrList = new ArrayList<>(); // 整理数据 for(int i=0;i<nums.length;i++){ if(nums[i]==0){ count++; continue; } arrList.add(nums[i]); } Collections.sort(arrList); Integer[] arr = arrList.toArray(new Integer[arrList.size()]); while(temp<arr.length-1){ if(arr[temp]+1 != arr[temp+1]){ int n = arr[temp+1]-arr[temp]-1; if(n<0){ return false; } if(n<=count){ count-=n; }else{ return false; } } temp++; } return true; } }
